import { isFunction } from './fns';

// 将选择器与父元素匹配
export function matchesSelectorToParentElements(el, selector, baseNode) {
    let node = el;

    const matchesSelectorFunc = [
        'matches',
        'webkitMatchesSelector',
        'mozMatchesSelector',
        'msMatchesSelector',
        'oMatchesSelector',
    ].find((func) => isFunction(node[func]));

    if (!isFunction(node[matchesSelectorFunc])) return false;

    do {
        if (node[matchesSelectorFunc](selector)) return true;
        if (node === baseNode) return false;
        node = node.parentNode;
    } while (node);

    return false;
}

export function getComputedSize($el) {
    const style = window.getComputedStyle($el);

    return [
        parseFloat(style.getPropertyValue('width'), 10),
        parseFloat(style.getPropertyValue('height'), 10),
    ];
}
// 添加事件
export function addEvent(el, event, handler) {
    if (!el) {
        return;
    }
    if (el.attachEvent) {
        el.attachEvent('on' + event, handler);
    } else if (el.addEventListener) {
        el.addEventListener(event, handler, true);
    } else {
        el['on' + event] = handler;
    }
}

// 删除事件
export function removeEvent(el, event, handler) {
    if (!el) {
        return;
    }
    if (el.detachEvent) {
        el.detachEvent('on' + event, handler);
    } else if (el.removeEventListener) {
        el.removeEventListener(event, handler, true);
    } else {
        el['on' + event] = null;
    }
}
